#region Acerca de...
///////////////////////////////////////////////////////////////////////////
// Empresa:  Instituto Tecnológico de Costa Rica
// Proyecto: Catalogo Produccion Agricola Protegida en Costa Rica
// Descripción: Clase de acceso a datos para tabla 'PERFIL'
// Generado por ITCR Gen v2010.0.0.0 
// Fecha: Tuesday, November 13, 2012, 9:31:19 PM
// Dado que esta clase implementa IDispose, las clases derivadas no deben hacerlo.
///////////////////////////////////////////////////////////////////////////
#endregion


using System;
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlClient;
//using Microsoft.SqlServer.Types;  //usarlo cuando hay tipos Geometry, Geography, HierarchiId. Está en C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll

namespace ITCR.ProyectoAgricola.Base
{
	/// <summary>
	/// Propósito: Clase de acceso a datos para tabla 'PERFIL'.
	/// </summary>
	public class cPERFILBase : cBDInteraccionBase
	{
		#region Declaraciones de miembros de la clase
			private SqlInt32		_importadorDirecto, _profesionalesInscritos, _subcontrataServicios, _soloDistribuidor, _serviciosEspecificos, _representanteDirecto, _catalogoProductos, _bodegasCentrales, _idEmpresa, _inventarioDisponible, _fuerzaVentas, _distribuidorAutorizados;
			private SqlString		_otro, _diasInventario;
		#endregion


		/// <summary>
		/// Propósito: Constructor de la clase.
		/// </summary>
		public cPERFILBase()
		{
			// Agregar código aquí.
		}


		/// <summary>
		/// Propósito: Método Insertar. Este método inserta una fila nueva en la base de datos.
		/// </summary>
		/// <returns>True si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>BodegasCentrales. May be SqlInt32.Null</LI>
		///		 <LI>CatalogoProductos. May be SqlInt32.Null</LI>
		///		 <LI>DistribuidorAutorizados. May be SqlInt32.Null</LI>
		///		 <LI>FuerzaVentas. May be SqlInt32.Null</LI>
		///		 <LI>InventarioDisponible. May be SqlInt32.Null</LI>
		///		 <LI>DiasInventario. May be SqlString.Null</LI>
		///		 <LI>ProfesionalesInscritos. May be SqlInt32.Null</LI>
		///		 <LI>ImportadorDirecto. May be SqlInt32.Null</LI>
		///		 <LI>RepresentanteDirecto. May be SqlInt32.Null</LI>
		///		 <LI>ServiciosEspecificos. May be SqlInt32.Null</LI>
		///		 <LI>SoloDistribuidor. May be SqlInt32.Null</LI>
		///		 <LI>SubcontrataServicios. May be SqlInt32.Null</LI>
		///		 <LI>Otro. May be SqlString.Null</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override bool Insertar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PERFIL_Insertar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ibodegasCentrales", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _bodegasCentrales));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@icatalogoProductos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _catalogoProductos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@idistribuidorAutorizados", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _distribuidorAutorizados));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ifuerzaVentas", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _fuerzaVentas));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iinventarioDisponible", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _inventarioDisponible));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sdiasInventario", SqlDbType.VarChar, 50, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _diasInventario));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iprofesionalesInscritos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _profesionalesInscritos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iimportadorDirecto", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _importadorDirecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@irepresentanteDirecto", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _representanteDirecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iserviciosEspecificos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _serviciosEspecificos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@isoloDistribuidor", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _soloDistribuidor));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@isubcontrataServicios", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _subcontrataServicios));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sotro", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _otro));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				_filasAfectadas = cmdAEjecutar.ExecuteNonQuery();
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PERFIL_Insertar' reportó el error Codigo: " + _codError);
				}

				return true;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPERFILBase::Insertar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método Update. Actualiza una fila existente en la base de datos.
		/// </summary>
		/// <returns>True si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>BodegasCentrales. May be SqlInt32.Null</LI>
		///		 <LI>CatalogoProductos. May be SqlInt32.Null</LI>
		///		 <LI>DistribuidorAutorizados. May be SqlInt32.Null</LI>
		///		 <LI>FuerzaVentas. May be SqlInt32.Null</LI>
		///		 <LI>InventarioDisponible. May be SqlInt32.Null</LI>
		///		 <LI>DiasInventario. May be SqlString.Null</LI>
		///		 <LI>ProfesionalesInscritos. May be SqlInt32.Null</LI>
		///		 <LI>ImportadorDirecto. May be SqlInt32.Null</LI>
		///		 <LI>RepresentanteDirecto. May be SqlInt32.Null</LI>
		///		 <LI>ServiciosEspecificos. May be SqlInt32.Null</LI>
		///		 <LI>SoloDistribuidor. May be SqlInt32.Null</LI>
		///		 <LI>SubcontrataServicios. May be SqlInt32.Null</LI>
		///		 <LI>Otro. May be SqlString.Null</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override bool Actualizar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PERFIL_Actualizar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ibodegasCentrales", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _bodegasCentrales));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@icatalogoProductos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _catalogoProductos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@idistribuidorAutorizados", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _distribuidorAutorizados));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ifuerzaVentas", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _fuerzaVentas));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iinventarioDisponible", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _inventarioDisponible));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sdiasInventario", SqlDbType.VarChar, 50, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _diasInventario));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iprofesionalesInscritos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _profesionalesInscritos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iimportadorDirecto", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _importadorDirecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@irepresentanteDirecto", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _representanteDirecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iserviciosEspecificos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _serviciosEspecificos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@isoloDistribuidor", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _soloDistribuidor));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@isubcontrataServicios", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _subcontrataServicios));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sotro", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _otro));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				_filasAfectadas = cmdAEjecutar.ExecuteNonQuery();
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PERFIL_Actualizar' reportó el error Codigo: " + _codError);
				}

				return true;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPERFILBase::Actualizar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método Eliminar. Borra una fila en la base de datos, basado en la llave primaria.
		/// </summary>
		/// <returns>True si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override bool Eliminar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PERFIL_Eliminar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				_filasAfectadas = cmdAEjecutar.ExecuteNonQuery();
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PERFIL_Eliminar' reportó el error Codigo: " + _codError);
				}

				return true;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPERFILBase::Eliminar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método SELECT. Este método hace Select de una fila existente en la base de datos, basado en la llave primaria.
		/// </summary>
		/// <returns>DataTable object si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>BodegasCentrales</LI>
		///		 <LI>CatalogoProductos</LI>
		///		 <LI>DistribuidorAutorizados</LI>
		///		 <LI>FuerzaVentas</LI>
		///		 <LI>InventarioDisponible</LI>
		///		 <LI>DiasInventario</LI>
		///		 <LI>ProfesionalesInscritos</LI>
		///		 <LI>ImportadorDirecto</LI>
		///		 <LI>RepresentanteDirecto</LI>
		///		 <LI>ServiciosEspecificos</LI>
		///		 <LI>SoloDistribuidor</LI>
		///		 <LI>SubcontrataServicios</LI>
		///		 <LI>Otro</LI>
		/// </UL>
		/// Llena todas las propiedades que corresponden al campo en tabla con el valor de la fila seleccionada.
		/// </remarks>
		public override DataTable SeleccionarUno()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PERFIL_SeleccionarUno]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;
			DataTable toReturn = new DataTable("PERFIL");
			SqlDataAdapter adapter = new SqlDataAdapter(cmdAEjecutar);

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				adapter.Fill(toReturn);
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PERFIL_SeleccionarUno' reportó el error Código: " + _codError);
				}

				if(toReturn.Rows.Count > 0)
				{
					_idEmpresa = (Int32)toReturn.Rows[0]["idEmpresa"];
					_bodegasCentrales = toReturn.Rows[0]["bodegasCentrales"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["bodegasCentrales"];
					_catalogoProductos = toReturn.Rows[0]["catalogoProductos"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["catalogoProductos"];
					_distribuidorAutorizados = toReturn.Rows[0]["distribuidorAutorizados"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["distribuidorAutorizados"];
					_fuerzaVentas = toReturn.Rows[0]["fuerzaVentas"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["fuerzaVentas"];
					_inventarioDisponible = toReturn.Rows[0]["inventarioDisponible"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["inventarioDisponible"];
					_diasInventario = toReturn.Rows[0]["diasInventario"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["diasInventario"];
					_profesionalesInscritos = toReturn.Rows[0]["profesionalesInscritos"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["profesionalesInscritos"];
					_importadorDirecto = toReturn.Rows[0]["importadorDirecto"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["importadorDirecto"];
					_representanteDirecto = toReturn.Rows[0]["representanteDirecto"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["representanteDirecto"];
					_serviciosEspecificos = toReturn.Rows[0]["serviciosEspecificos"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["serviciosEspecificos"];
					_soloDistribuidor = toReturn.Rows[0]["soloDistribuidor"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["soloDistribuidor"];
					_subcontrataServicios = toReturn.Rows[0]["subcontrataServicios"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["subcontrataServicios"];
					_otro = toReturn.Rows[0]["otro"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["otro"];
				}
				return toReturn;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPERFILBase::SeleccionarUno::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
				adapter.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método SeleccionarTodos. Este método va a Hacer un SELECT All de tabla.
		/// </summary>
		/// <returns>DataTable object si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override DataTable SeleccionarTodos()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PERFIL_SeleccionarTodos]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;
			DataTable toReturn = new DataTable("PERFIL");
			SqlDataAdapter adapter = new SqlDataAdapter(cmdAEjecutar);

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				adapter.Fill(toReturn);
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PERFIL_SeleccionarTodos' reportó el error Código: " + _codError);
				}

				return toReturn;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPERFILBase::SeleccionarTodos::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
				adapter.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método Buscar. Este método hace una busqueda de acuerdo con todos los campos de la tabla.
		/// </summary>
		/// <returns>DataTable si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>BodegasCentrales. May be SqlInt32.Null</LI>
		///		 <LI>CatalogoProductos. May be SqlInt32.Null</LI>
		///		 <LI>DistribuidorAutorizados. May be SqlInt32.Null</LI>
		///		 <LI>FuerzaVentas. May be SqlInt32.Null</LI>
		///		 <LI>InventarioDisponible. May be SqlInt32.Null</LI>
		///		 <LI>DiasInventario. May be SqlString.Null</LI>
		///		 <LI>ProfesionalesInscritos. May be SqlInt32.Null</LI>
		///		 <LI>ImportadorDirecto. May be SqlInt32.Null</LI>
		///		 <LI>RepresentanteDirecto. May be SqlInt32.Null</LI>
		///		 <LI>ServiciosEspecificos. May be SqlInt32.Null</LI>
		///		 <LI>SoloDistribuidor. May be SqlInt32.Null</LI>
		///		 <LI>SubcontrataServicios. May be SqlInt32.Null</LI>
		///		 <LI>Otro. May be SqlString.Null</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override DataTable Buscar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PERFIL_Buscar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;
			DataTable toReturn = new DataTable("PERFIL");
			SqlDataAdapter adapter = new SqlDataAdapter(cmdAEjecutar);

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ibodegasCentrales", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _bodegasCentrales));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@icatalogoProductos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _catalogoProductos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@idistribuidorAutorizados", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _distribuidorAutorizados));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ifuerzaVentas", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _fuerzaVentas));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iinventarioDisponible", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _inventarioDisponible));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sdiasInventario", SqlDbType.VarChar, 50, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _diasInventario));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iprofesionalesInscritos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _profesionalesInscritos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iimportadorDirecto", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _importadorDirecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@irepresentanteDirecto", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _representanteDirecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iserviciosEspecificos", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _serviciosEspecificos));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@isoloDistribuidor", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _soloDistribuidor));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@isubcontrataServicios", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _subcontrataServicios));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sotro", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _otro));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				adapter.Fill(toReturn);
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PERFIL_Buscar' reportó el error Código: " + _codError);
				}

				return toReturn;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPERFILBase::Buscar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
				adapter.Dispose();
			}
		}


		#region Declaraciones de propiedades de la clase
		public SqlInt32 IdEmpresa
		{
			get
			{
				return _idEmpresa;
			}
			set
			{
				SqlInt32 idEmpresaTmp = (SqlInt32)value;
				if(idEmpresaTmp.IsNull)
				{
					throw new ArgumentOutOfRangeException("IdEmpresa", "IdEmpresa can't be NULL");
				}
				_idEmpresa = value;
			}
		}


		public SqlInt32 BodegasCentrales
		{
			get
			{
				return _bodegasCentrales;
			}
			set
			{
				_bodegasCentrales = value;
			}
		}


		public SqlInt32 CatalogoProductos
		{
			get
			{
				return _catalogoProductos;
			}
			set
			{
				_catalogoProductos = value;
			}
		}


		public SqlInt32 DistribuidorAutorizados
		{
			get
			{
				return _distribuidorAutorizados;
			}
			set
			{
				_distribuidorAutorizados = value;
			}
		}


		public SqlInt32 FuerzaVentas
		{
			get
			{
				return _fuerzaVentas;
			}
			set
			{
				_fuerzaVentas = value;
			}
		}


		public SqlInt32 InventarioDisponible
		{
			get
			{
				return _inventarioDisponible;
			}
			set
			{
				_inventarioDisponible = value;
			}
		}


		public SqlString DiasInventario
		{
			get
			{
				return _diasInventario;
			}
			set
			{
				_diasInventario = value;
			}
		}


		public SqlInt32 ProfesionalesInscritos
		{
			get
			{
				return _profesionalesInscritos;
			}
			set
			{
				_profesionalesInscritos = value;
			}
		}


		public SqlInt32 ImportadorDirecto
		{
			get
			{
				return _importadorDirecto;
			}
			set
			{
				_importadorDirecto = value;
			}
		}


		public SqlInt32 RepresentanteDirecto
		{
			get
			{
				return _representanteDirecto;
			}
			set
			{
				_representanteDirecto = value;
			}
		}


		public SqlInt32 ServiciosEspecificos
		{
			get
			{
				return _serviciosEspecificos;
			}
			set
			{
				_serviciosEspecificos = value;
			}
		}


		public SqlInt32 SoloDistribuidor
		{
			get
			{
				return _soloDistribuidor;
			}
			set
			{
				_soloDistribuidor = value;
			}
		}


		public SqlInt32 SubcontrataServicios
		{
			get
			{
				return _subcontrataServicios;
			}
			set
			{
				_subcontrataServicios = value;
			}
		}


		public SqlString Otro
		{
			get
			{
				return _otro;
			}
			set
			{
				_otro = value;
			}
		}
		#endregion
	}
}
